<?php
/**
 * 图片压缩功能测试脚本
 * 使用方法: php test_image_compress.php [图片路径]
 */

require_once __DIR__ . '/vendor/autoload.php';
use think\App;

// 创建 App 实例（传入应用根目录路径）
$app = new App(__DIR__);

// 初始化配置和服务容器
$app->initialize();

use app\service\ImageCompressService;

// 检查命令行参数
if ($argc < 2) {
    echo "使用方法: php test_image_compress.php [图片路径]\n";
    echo "示例: php test_image_compress.php /path/to/image.jpg\n";
    exit(1);
}

$imagePath = $argv[1];

// 检查文件是否存在
if (!file_exists($imagePath)) {
    echo "错误: 文件不存在 - {$imagePath}\n";
    exit(1);
}

// 检查是否为图片文件
$imageInfo = getimagesize($imagePath);
if (!$imageInfo) {
    echo "错误: 不是有效的图片文件 - {$imagePath}\n";
    exit(1);
}

echo "=== 图片压缩测试 ===\n";
echo "测试文件: {$imagePath}\n";

// 显示原始图片信息
$originalSize = filesize($imagePath);
echo "原始大小: " . formatBytes($originalSize) . "\n";
echo "原始尺寸: {$imageInfo[0]} x {$imageInfo[1]}\n";
echo "图片类型: {$imageInfo['mime']}\n";

// 创建压缩服务实例
$compressService = new ImageCompressService();

// 获取压缩统计信息
echo "\n=== 压缩分析 ===\n";
$stats = $compressService->getCompressionStats($imagePath);
echo "文件大小: {$stats['file_size_mb']} MB\n";
echo "图片尺寸: {$stats['dimensions']}\n";
echo "需要压缩: " . ($stats['needs_compression'] ? '是' : '否') . "\n";
echo "目标大小: {$stats['target_size_mb']} MB\n";

if ($stats['needs_compression']) {
    echo "推荐设置:\n";
    echo "  - 质量: {$stats['recommended_settings']['quality']}%\n";
    echo "  - 最大宽度: {$stats['recommended_settings']['maxWidth']}px\n";
    echo "  - 最大高度: {$stats['recommended_settings']['maxHeight']}px\n";
}

// 执行压缩测试
echo "\n=== 开始压缩 ===\n";
$testPath = dirname($imagePath) . '/compressed_' . basename($imagePath);

$result = $compressService->compressImage($imagePath, $testPath);

if ($result['success']) {
    if ($result['compressed']) {
        echo "压缩成功!\n";
        echo "压缩后大小: " . formatBytes($result['final_size']) . "\n";
        echo "压缩比例: {$result['compression_ratio']}%\n";
        echo "使用质量: {$result['quality']}%\n";
        echo "新尺寸: {$result['dimensions']['width']} x {$result['dimensions']['height']}\n";
        echo "压缩文件: {$testPath}\n";

        // 计算节省的空间
        $savedBytes = $result['original_size'] - $result['final_size'];
        echo "节省空间: " . formatBytes($savedBytes) . "\n";

        // 检查是否符合微信要求
        $wechatLimit = 2 * 1024 * 1024; // 2MB
        if ($result['final_size'] <= $wechatLimit) {
            echo "✅ 符合微信接口要求 (≤2MB)\n";
        } else {
            echo "❌ 仍超过微信接口限制 (>2MB)\n";
        }

    } else {
        echo "图片无需压缩，已符合要求\n";
        echo "文件大小: " . formatBytes($result['final_size']) . "\n";
    }
} else {
    echo "压缩失败: {$result['error']}\n";
}

echo "\n=== 测试完成 ===\n";

/**
 * 格式化字节大小
 */
function formatBytes($bytes, $precision = 2)
{
    $units = array('B', 'KB', 'MB', 'GB', 'TB');

    for ($i = 0; $bytes > 1024 && $i < count($units) - 1; $i++) {
        $bytes /= 1024;
    }

    return round($bytes, $precision) . ' ' . $units[$i];
}
